// Variables para el manejo de hojas
var hojaPrincipal = "Hoja 1";
var hojaUltimosValores = "Últimos Valores";
var hojaDatosUsuarios = "datos usuarios";

var ss = SpreadsheetApp.getActiveSpreadsheet();
var hoja = ss.getSheetByName(hojaPrincipal);
var hojaValores = ss.getSheetByName(hojaUltimosValores);
var hojaUsuarios = ss.getSheetByName(hojaDatosUsuarios);

// Variables obtenidas de funciones por return
var e_number;

// función para manejar las solicitudes HTTP POST entrantes. Cuando se recibe una solicitud POST, llama a la función handleRepose y le pasa el objeto de solicitud e.

function doPost(e){

  return handleRepose(e) ;

}


  // Código para crear o obtener una hoja llamada '_Logs'
function crearHojaLogs() {

  // se crea una variable para la hoja de errores, elcódigo comprueba si la hoja ya existe, y si no la inserta.
  var sheet_log = ss.getSheetByName('_Logs');
  if (!sheet_log) {
    ss.insertSheet('_Logs');
    sheet_log = ss.getSheetByName('_Logs');
  }
  // Registramos el número de ejecuciones
  if (sheet_log.getRange('A1').isBlank()) {
    sheet_log.getRange('A1').setValue(1);

   // actualiza el recuento de ejecuciones en la celda A1 de la hoja '_Logs'sumandole 1
  } else {
    sheet_log.getRange('A1').setValue(sheet_log.getRange('A1').getValue() + 1);
  }

  // Devuelve el número de ejecución y lo almacena en la variable e_number
  e_number = sheet_log.getRange('A1').getValue();
  return e_number;
}
function crearHojaUltimosValores() {

  // se crea una variable para la hoja de errores, elcódigo comprueba si la hoja ya existe, y si no la inserta.
  var hojaValores = ss.getSheetByName(hojaUltimosValores);
  if (!hojaValores) {
    ss.insertSheet(hojaUltimosValores);
    hojaValores = ss.getSheetByName(hojaUltimosValores);
  }

      // Cabecera
    // La creamos si no existe
    if(hojaValores.getRange('A1').isBlank()){
      var h_row2 = []; //contenedor para almacenar con push los nombres de las cabeceras
      //empujamos los datos al array vacío
      h_row2.push("Nombre");  
      h_row2.push("Fecha");
      h_row2.push("Humedad %");
      h_row2.push("Bateria V");
      h_row2.push("Temperatura ºC"); 
      h_row2.push("CE");
      h_row2.push("Posición");



      // pegamos los datos en la primera fila
      hojaValores.getRange(1, 1, 1, h_row2.length).setValues([h_row2]);
    }

}


// Función para 

function handleRepose(e) {

  //llamamos a la función que crea la hoja de errores y a la que crea las hojas de datos
    crearHojaLogs()
    crearHojaUltimosValores()
 
   try{

    // Cabecera
    // La creamos si no existe
    if(hoja.getRange('A1').isBlank()){
      var h_row = []; //contenedor para almacenar con push los nombres de las cabeceras
      
      h_row.push("cen");  // current execution number
      h_row.push("fecha-hora");
      h_row.push("nombre");
      h_row.push("Humedad %");
      h_row.push("Bateria V"); 
      h_row.push("Temperatura ºC");
      h_row.push("CE");
      h_row.push("Posición");

      hoja.getRange(1, 1, 1, h_row.length).setValues([h_row]);
    }

    // Parseamos los datos entrantes, que vienen en formato JSON

    // se explicará como llamar los datos dentro del JSON con mas detalle en otro ejercicio
    var jsonData = JSON.parse(e.postData.contents);
    var row = [];
      row.push(e_number);
      row.push(new Date()); 
      row.push(jsonData.end_device_ids.device_id);
      row.push(jsonData.uplink_message.decoded_payload.water_SOIL !== undefined ? jsonData.uplink_message.decoded_payload.water_SOIL.toString().replace('.', ',') : '');
      row.push(jsonData.uplink_message.decoded_payload.Bat !== undefined ? jsonData.uplink_message.decoded_payload.Bat.toString().replace('.', ',') : '');
      row.push(jsonData.uplink_message.decoded_payload.temp_SOIL !== undefined ? jsonData.uplink_message.decoded_payload.temp_SOIL.toString().replace('.', ',') : '');
      row.push(jsonData.uplink_message.decoded_payload.conduct_SOIL !== undefined ? jsonData.uplink_message.decoded_payload.conduct_SOIL.toString().replace('.', ',') : '');
 
    hoja.appendRow(row);



    } catch (err) {
      // Guardamos los errores que haya podido haber
      var sheet_log = ss.getSheetByName('_Logs');
      sheet_log.appendRow([e_number, err.message]);
    }
  
    
}